package br.com.jk.usuario.jtable;

import br.com.jk.usuario.Usuario;
import java.util.Date;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author camilo
 */
public class UsuarioJTableUtil {

  /**
   * Cria um registro no banco de dados referente as informações das larguras e posições das colunas do JTable passado
   * como parâmetro.
   * @param model
   * @param table
   * @param nameTable
   * @param usuario
   */
  public static void setUsuarioJTable(AbstractTableModel model, JTable table, String nameTable, Usuario usuario) {
    UsuarioJTableRn usRn = new UsuarioJTableRn();
    UsuarioJTable usJtable = usRn.carregarJTableUsuario(nameTable, usuario);

    if (usJtable == null) {
      usJtable = new UsuarioJTable();
    }

    int qtdColumns = model.getColumnCount();
    Integer[] larguras = new Integer[qtdColumns];
    Integer[] indices = new Integer[qtdColumns];

    for (int i = 0; i < qtdColumns; i++) {
      indices[i] = table.convertColumnIndexToView(i);
      larguras[i] = table.getColumnModel().getColumn(table.convertColumnIndexToView(i)).getPreferredWidth();

      System.out.println("largura: " + i + " - " + larguras[i] + " - indexToView " + table.convertColumnIndexToView(i)
              + " indexToModel " + table.convertColumnIndexToModel(i));
      System.out.println("Índice: " + i + " - " + indices[i]);
    }

    usJtable.setLarguraColunas(larguras);
    usJtable.setPosicaoColunas(indices);
    usJtable.setjTable(nameTable);
    usJtable.setUsuario(usuario);
    usJtable.setDataAlteracao(new Date(System.currentTimeMillis()));

    usRn.salvar(usJtable);
  }

  /**
   * Altera a largura e a posição das colunas da JTable passado como parâmetro, de acordo as informações salvas no banco
   * de dados.<br/>
   * Se não houver nenhum registro referente a JTable ele mantem as larguras e posições default.
   * @param model
   * @param table
   * @param nameTable
   * @param usuario
   */
  public static void alteraJTable(AbstractTableModel model, JTable table, String nameTable, Usuario usuario) {
    UsuarioJTableRn usRn = new UsuarioJTableRn();
    UsuarioJTable usJtable = usRn.carregarJTableUsuario(nameTable, usuario);

    int qtdColumns = model.getColumnCount();

    if (usJtable != null) {
      Integer[] larguras = usJtable.getLarguraColunas();
      Integer[] indices = usJtable.getPosicaoColunas();
//      move as colunas
      for (int i = 0; i < qtdColumns; i++) {
        table.moveColumn(table.convertColumnIndexToView(i), indices[i]);
      }
//      ajusta as larguras
      for (int i = 0; i < qtdColumns; i++) {
        table.getColumnModel().getColumn(table.convertColumnIndexToView(i))
                .setPreferredWidth(larguras[i]);
      }
    }
  }
}
